const mysql = require('mysql2/promise');
require('dotenv').config();

async function testDatabaseConnection() {
  let connection;
  
  try {
    console.log('🔍 正在测试数据库连接...\n');
    
    // 显示配置信息（隐藏密码）
    console.log('📋 数据库配置:');
    console.log(`   主机: ${process.env.DB_HOST}`);
    console.log(`   端口: ${process.env.DB_PORT}`);
    console.log(`   用户: ${process.env.DB_USER}`);
    console.log(`   数据库: ${process.env.DB_NAME}`);
    console.log(`   密码: ${process.env.DB_PASSWORD ? '***已设置***' : '❌ 未设置'}\n`);
    
    // 创建数据库连接
    connection = await mysql.createConnection({
      host: process.env.DB_HOST,
      port: process.env.DB_PORT || 3306,
      user: process.env.DB_USER,
      password: process.env.DB_PASSWORD,
      database: process.env.DB_NAME,
      charset: 'utf8mb4',
      timezone: '+08:00',
      connectTimeout: 10000
    });
    
    console.log('✅ 数据库连接成功！\n');
    
    // 测试查询
    console.log('📊 测试数据库查询...');
    const [rows] = await connection.execute('SELECT VERSION() as version, DATABASE() as database_name, USER() as user');
    console.log(`   MySQL版本: ${rows[0].version}`);
    console.log(`   当前数据库: ${rows[0].database_name}`);
    console.log(`   当前用户: ${rows[0].user}\n`);
    
    // 检查表是否存在
    console.log('📋 检查数据库表...');
    const [tables] = await connection.execute(
      "SELECT COUNT(*) as count FROM information_schema.tables WHERE table_schema = ?",
      [process.env.DB_NAME]
    );
    console.log(`   数据库中共有 ${tables[0].count} 个表\n`);
    
    // 列出一些主要表
    const [tableList] = await connection.execute(
      "SELECT table_name FROM information_schema.tables WHERE table_schema = ? AND table_type = 'BASE TABLE' ORDER BY table_name LIMIT 10",
      [process.env.DB_NAME]
    );
    
    if (tableList.length > 0) {
      console.log('   主要表列表（前10个）:');
      tableList.forEach((table, index) => {
        console.log(`   ${index + 1}. ${table.table_name}`);
      });
    }
    
    console.log('\n✅ 数据库连接测试完成！所有检查通过。');
    return true;
    
  } catch (error) {
    console.error('\n❌ 数据库连接失败！');
    console.error(`   错误代码: ${error.code}`);
    console.error(`   错误信息: ${error.message}`);
    
    if (error.code === 'ECONNREFUSED') {
      console.error('\n💡 提示: 无法连接到数据库服务器，请检查:');
      console.error('   1. 数据库服务器是否运行');
      console.error('   2. 主机地址和端口是否正确');
      console.error('   3. 防火墙是否允许连接');
    } else if (error.code === 'ER_ACCESS_DENIED_ERROR') {
      console.error('\n💡 提示: 数据库访问被拒绝，请检查:');
      console.error('   1. 用户名和密码是否正确');
      console.error('   2. 用户是否有访问该数据库的权限');
    } else if (error.code === 'ER_BAD_DB_ERROR') {
      console.error('\n💡 提示: 数据库不存在，请检查:');
      console.error('   1. 数据库名称是否正确');
      console.error('   2. 是否需要先创建数据库');
    }
    
    return false;
  } finally {
    if (connection) {
      await connection.end();
      console.log('\n🔌 数据库连接已关闭');
    }
  }
}

// 运行测试
testDatabaseConnection()
  .then((success) => {
    process.exit(success ? 0 : 1);
  })
  .catch((error) => {
    console.error('测试过程中发生错误:', error);
    process.exit(1);
  });

